package me.dwk.dandan.function;
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with this
 * work for additional information regarding copyright ownership. The ASF
 * licenses this file to You under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
 * or agreed to in writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */

import java.util.Collection;
import java.util.List;

import me.dwk.dandan.function.exception.InvalidVariableException;

/**
 * Methods that a function must implement
 */
public interface Function {

	String execute() throws InvalidVariableException;

	void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException;

	/**
	 * Return the name of your function. Convention is to prepend "__" to the name
	 * (ie "__regexFunction")
	 *
	 * @return The name of the funtion
	 */
	String getReferenceKey();

	/**
	 * Return a list of strings briefly describing each parameter your function
	 * takes. Please use JMeterUtils.getResString(resource_name) to grab a resource
	 * string. Otherwise, your help text will be difficult to internationalize.
	 *
	 * This list is not optional. If you don't wish to write help, you must at least
	 * return a List containing the correct number of blank strings, one for each
	 * argument.
	 *
	 * @return List with brief descriptions for each parameter the function takes
	 */
	List<String> getArgumentDesc();
}
